chore(pipeline): timetable adjustments under pipelining#21076
chore(pipeline): timetable adjustments under pipelining#21076Maddiaa0 wants to merge 1 commit intographite-base/21076from
Conversation
6f951d7 to
5871d42
Compare
8de6157 to
31f941d
Compare
5871d42 to
990033f
Compare
27f8a4b to
f5c6308
Compare
990033f to
92ac108
Compare
f5c6308 to
ae6b651
Compare
92ac108 to
2a965f2
Compare
2a965f2 to
c2df8a2
Compare
ae6b651 to
3a47fbf
Compare
c2df8a2 to
6ccc88b
Compare
3a47fbf to
4bb6845
Compare
6ccc88b to
d349239
Compare
4bb6845 to
0e9b52e
Compare
0e9b52e to
dee426a
Compare
d349239 to
24f6555
Compare
24f6555 to
cb21eb9
Compare
dee426a to
5820d21
Compare
5820d21 to
eedf075
Compare
cb21eb9 to
45ff14f
Compare
eedf075 to
7c2c34a
Compare
45ff14f to
456e3e9
Compare
7c2c34a to
c2cc23c
Compare
456e3e9 to
f9ca5bf
Compare
f9ca5bf to
e50ad91
Compare
c2cc23c to
2d31671
Compare
e50ad91 to
890ce40
Compare
2d31671 to
2591475
Compare
890ce40 to
ce7da45
Compare
spalladino
left a comment
There was a problem hiding this comment.
Looks good! There seems to be a few changes still pending from the proposal handler, but nothing that can't addressed in a later PR.
Also, let's update the timetable (or a new sequencer one?) README, to clarify that when pipelining is enabled, building and block reexecution happens during slot N-1, while checkpoint proposal, attestation gathering, and L1 submission happens during N.
| /** Returns epoch/slot info for the next L1 slot with pipeline offset applied. */ | ||
| getTargetEpochAndSlotInNextL1Slot(): EpochAndSlot & { nowSeconds: bigint }; | ||
| isProposerPipeliningEnabled(): boolean; | ||
| pipeliningOffset(): number; |
There was a problem hiding this comment.
Nit: in another PR (so as not to have to update the entire stack), it'd be good to rename to pipelineOffsetInSlots or pipelineSlotOffset. I originally thought it was number of seconds.
| // If we are pipelining and have a pending checkpoint number stored, we will allow the block proposal to be for a slot further | ||
| const syncedSlot = await this.blockSource.getSyncedL2SlotNumber(); | ||
| if (syncedSlot !== undefined && syncedSlot + 1 >= slot) { | ||
| if (syncedSlot !== undefined && syncedSlot + 1 + this.epochCache.pipeliningOffset() >= slot) { |
There was a problem hiding this comment.
Heads up that in L254 you don't call this function if pipelining is disabled
| private getReexecutionDeadline(slot: SlotNumber, config: { l1GenesisTime: bigint; slotDuration: number }): Date { | ||
| const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(slot + 1), config)); | ||
| return new Date(nextSlotTimestampSeconds * 1000); | ||
| } |
There was a problem hiding this comment.
Should we adjust this deadline for pipelining?

Overview
When pipelining, don't leave checkpoint submission to determine when the timeslot ends - as we have the entire of the next slot for that